package gest;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class Estat_Med {

	static int li;
	static Registry re;
	static Gestao g;
	static Scanner sca = new Scanner(System.in);
	static Connection conn;
	static Medico me;

	public Estat_Med(int l, String comp) {
		if (comp.equals("a")) {
			String q;
			q = "select Medicamentos.nome from Medicamentos, Medicos, Receitas"
					+ " where Receitas.idMed=Medicos.idMed and"
					+ " Receitas.idMedi=Medicamentos.idMedi and Medicos.licenca="
					+ l + " group by Receitas.idmedi "
					+ " order by count(Receitas.idmedi) desc limit 3";
			// System.out.println(q);
			java.sql.ResultSet rs = null;
			rs = querry(q);
			try {
				rs.first();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			String que;
			que = "select Farmacias.nome from Farmacias, Medicos, Receitas "
					+ "where Receitas.idMed=Medicos.idMed and"
					+ " Receitas.idFarm=Farmacias.idFarm and Medicos.licenca="
					+ l + " group by Receitas.idfarm"
					+ " order by count(Receitas.idfarm) desc limit 3";
			// System.out.println(que);
			java.sql.ResultSet rs = querry(que);
			try {
				rs.first();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public Estat_Med(int l, int a){
		String ano = Integer.toString(a);
		String querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
				+ ano
				+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
				+ l;
		java.sql.ResultSet rs = querry(querry);
		// System.out.println(querry);
		try {
			rs.first();
			System.out
					.println("O numero de receitas prescritas pelo medico no ano em questao e':"
							+ rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Estat_Med(int l, int a, int m){
		String mes = Integer.toString(m);
		String ano = Integer.toString(a);
		String querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
				+ ano
				+ "' and MONTH(Receitas.dpres) ='"
				+ mes
				+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
				+ l;
		// System.out.println(querry);
		java.sql.ResultSet rs = querry(querry);
		try {
			rs.first();
			System.out
					.println("O numero de receitas prescritas pelo medico no mes em questao e':"
							+ rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public Estat_Med(int l, int a, int m, int d){
		String dia = Integer.toString(d);
		String mes = Integer.toString(m);
		String ano = Integer.toString(a);
		String querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
				+ ano
				+ "' and MONTH(Receitas.dpres) ='"
				+ mes
				+ "' and DAY(Receitas.dpres) ='"
				+ dia
				+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
				+ l;
		java.sql.ResultSet rs = querry(querry);
		// System.out.println(querry);
		try {
			rs.first();
			System.out
					.println("O numero de receitas prescritas pelo medico no dia em questao e':"
							+ rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		if (args[0].equals("-i")) {
			try {
				re = LocateRegistry.getRegistry();
				g = (Gestao) re.lookup("GestaoReceitas");
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			}
			g = new Gestao_Impl();
			selecciona();
		} else if (args[0].equals("-mm")) {
			new Estat_Med(Integer.parseInt(args[1]), "a");

		} else if (args[0].equals("-mf")) {
			new Estat_Med(Integer.parseInt(args[1]), "b");
		} else if (args[0].equals("-a")) {
			new Estat_Med(Integer.parseInt(args[1]), Integer.parseInt(args[2]));
		} else if (args[0].equals("-m")) {
			new Estat_Med(Integer.parseInt(args[1]), Integer.parseInt(args[2]),
					Integer.parseInt(args[3]));
		} else if (args[0].equals("-d")) {
				new Estat_Med(Integer.parseInt(args[1]), Integer.parseInt(args[2]),
						Integer.parseInt(args[3]), Integer.parseInt(args[4]));
		} else
			System.out.println("Opcao invalida");
	}

	public static void selecciona() {
		System.out.println("Insira a licenca do Medico");
		li = Integer.parseInt(sca.nextLine());
		try {
			me = g.cria_medico(li);
			System.out.println("O nome do medico e'" + me.get_nome());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		System.out.println("Escolha agora a pesquisa a efecutar:\n"
				+ "1-Receitas por Data\n"
				+ "2-Quais os medicamentos que mais prescrebe\n"
				+ "3-Quais as farmacias que prescrevem as receitas\n"
				+ "4-Fechar");
		int x = Integer.parseInt(sca.nextLine());
		switch (x) {
		case 1:
			Receita_Data();
			break;
		case 2:
			Mais_med();
			break;
		case 3:
			Farm_med();
			break;
		case 4:
			System.exit(0);
		default:
			System.out.println("Opccao invalida!!!");
			selecciona();
			break;
		}

	}

	public static java.sql.ResultSet querry(String q) {
		if (conn == null)
			conn = DBConnection.get_conn();
		java.sql.Statement st;
		java.sql.ResultSet rs = null;
		try {
			st = conn.createStatement();
			rs = st.executeQuery(q);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	public static void Receita_Data() {
		System.out
				.println("Deseja fazer pesquisa por:\n 1-dia\n 2-mes\n 3-ano");
		java.sql.ResultSet rs = null;
		int x = 0;
		String querry = null, dia = null, mes = null, ano = null;
		x = Integer.parseInt(sca.nextLine());
		switch (x) {
		case 1:
			System.out.println("Insira o dia pretendido (dd)");
			dia = sca.nextLine();
			System.out.println("Insira o numero do mes pretendido (mm)");
			mes = sca.nextLine();
			System.out.println("Insira o ano pretendido (yyyy)");
			ano = sca.nextLine();
			querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
					+ ano
					+ "' and MONTH(Receitas.dpres) ='"
					+ mes
					+ "' and DAY(Receitas.dpres) ='"
					+ dia
					+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
					+ li;
			rs = querry(querry);
			// System.out.println(querry);
			try {
				rs.first();
				System.out
						.println("O numero de receitas prescritas pelo medico no dia em questao e':"
								+ rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
			System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
					+ "2-Nao\n");
			int res = Integer.parseInt(sca.nextLine());
			switch (res) {
			case 1:
				selecciona();
				break;
			case 2:
				System.exit(0);
				break;
			}
			break;
		case 2:
			System.out.println("Insira o mes pretendido (mm)");
			mes = sca.nextLine();
			System.out.println("Insira o ano pretendido (yyyy)");
			ano = sca.nextLine();
			querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
					+ ano
					+ "' and MONTH(Receitas.dpres) ='"
					+ mes
					+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
					+ li;
			// System.out.println(querry);
			rs = querry(querry);
			try {
				rs.first();
				System.out
						.println("O numero de receitas prescritas pelo medico no dia em questao e':"
								+ rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
			System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
					+ "2-Nao\n");
			int res2 = Integer.parseInt(sca.nextLine());
			switch (res2) {
			case 1:
				selecciona();
				break;
			case 2:
				System.exit(0);
				break;
			}
			break;
		case 3:
			System.out.println("Insira o ano pretendido (yyyy)");
			ano = sca.nextLine();
			querry = "select count(*) from Receitas, Medicos where YEAR(Receitas.dpres) = '"
					+ ano
					+ "' and Receitas.idmed=Medicos.idmed and Medicos.licenca="
					+ li;
			rs = querry(querry);
			// System.out.println(querry);
			try {
				rs.first();
				System.out
						.println("O numero de receitas prescritas pelo medico no dia em questao e':"
								+ rs.getString(1));
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
					+ "2-Nao\n");
			int res3 = Integer.parseInt(sca.nextLine());
			switch (res3) {
			case 1:
				selecciona();
				break;
			case 2:
				System.exit(0);
				break;
			}
			break;
		default:
			System.out.println("Opccao invalida!!!");
			Receita_Data();
			break;
		}
	}

	public static void Mais_med() {
		String q;
		q = "select Medicamentos.nome from Medicamentos, Medicos, Receitas"
				+ " where Receitas.idMed=Medicos.idMed and"
				+ " Receitas.idMedi=Medicamentos.idMedi and Medicos.licenca="
				+ li + " group by Receitas.idmedi "
				+ " order by count(Receitas.idmedi) desc limit 3";
		// System.out.println(q);
		java.sql.ResultSet rs = null;
		rs = querry(q);
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res3 = Integer.parseInt(sca.nextLine());
		switch (res3) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}

	public static void Farm_med() {
		String que;
		que = "select Farmacias.nome from Farmacias, Medicos, Receitas "
				+ "where Receitas.idMed=Medicos.idMed and"
				+ " Receitas.idFarm=Farmacias.idFarm and Medicos.licenca=" + li
				+ " group by Receitas.idfarm"
				+ " order by count(Receitas.idfarm) desc limit 3";
		// System.out.println(que);
		java.sql.ResultSet rs = querry(que);
		try {
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res3 = Integer.parseInt(sca.nextLine());
		switch (res3) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}

}
